home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / macros / latex209 / contrib / loggates / loggates.sty < prev    next >
Text File  |  1992-06-14  |  6KB  |  140 lines

  1. %%% ====================================================================
  2. %%%  @LaTeX-style-file{
  3. %%%     author          = "Nico Verwer",
  4. %%%     version         = "1.1",
  5. %%%     date            = "8 April 1992",
  6. %%%     filename        = "loggates.sty",
  7. %%%     address         = "Dept. of Computer Science
  8. %%%                        Rijksuniversiteit te Utrecht
  9. %%%                        P.O. box 80.089
  10. %%%                        3508 TB Utrecht
  11. %%%                        the Netherlands",
  12. %%%     telephone       = "+31 30 533921",
  13. %%%     FAX             = "+31 30 513791",
  14. %%%     email           = "nico@cs.ruu.nl (Internet)",
  15. %%%     codetable       = "ISO/ASCII",
  16. %%%     keywords        = "TeX, LaTeX, logical gates symbols",
  17. %%%     supported       = "yes",
  18. %%%     docstring       = "This file accompanies the file loggates.mf
  19. %%%                        which contains Metafont definitions of
  20. %%%                        symbols for drawing digital circuit diagrams.
  21. %%%                        It defines macros to draw all possible 
  22. %%%                        gates in all directions.
  23. %%%                        If you use this file with plain TeX, you may
  24. %%%                        want to call it loggates.tex. Since it uses @
  25. %%%                        as a character, it must be a style file in
  26. %%%                        LaTeX.
  27. %%%                        The next version of this file will include
  28. %%%                        an interface with the XY-pic package for
  29. %%%                        drawing diagrams.",
  30. %%%  }
  31. %%% ====================================================================
  32. %
  33. \font\loggates=loggates
  34. %
  35. \def\BusWidth{{\loggates\char0}}         % '/' for bus width notation
  36. %
  37. % Defintions for gates. All the gates that may have more than one
  38. % input (AND, NAND, OR, NOR, XOR, NXOR) may be followed by a single
  39. % digit from 2 to 5, to indicate the number of inputs.
  40. % On the OR-like gates, this will draw short input lines; for the
  41. % AND-like gates it has no effect.
  42. %
  43. \def\ANDr{\gdef\@gate{\char1}\@NIN}      % AND gate facing right
  44. \def\ANDd{\gdef\@gate{\char2}\@NIN}      %                 down
  45. \def\ANDl{\gdef\@gate{\char3}\@NIN}      %                 left
  46. \def\ANDu{\gdef\@gate{\char4}\@NIN}      %                 up
  47. \def\NANDr{\gdef\@gate{\char5}\@NIN}     % NAND gate facing right
  48. \def\NANDd{\gdef\@gate{\char6}\@NIN}     %           etcetera...
  49. \def\NANDl{\gdef\@gate{\char7}\@NIN}
  50. \def\NANDu{\gdef\@gate{\char8}\@NIN}
  51. \def\ORr{\gdef\@gate{\char9}\@INr}       % OR gate 
  52. \def\ORd{\gdef\@gate{\char10}\@INd}
  53. \def\ORl{\gdef\@gate{\char11}\@INl}
  54. \def\ORu{\gdef\@gate{\char12}\@INu}
  55. \def\NORr{\gdef\@gate{\char13}\@INr}     % NOR gate
  56. \def\NORd{\gdef\@gate{\char14}\@INd}
  57. \def\NORl{\gdef\@gate{\char15}\@INl}
  58. \def\NORu{\gdef\@gate{\char16}\@INu}
  59. \def\BUFr{{\loggates\char17}}            % Buffer
  60. \def\BUFd{{\loggates\char18}}
  61. \def\BUFl{{\loggates\char19}}
  62. \def\BUFu{{\loggates\char20}}
  63. \def\INVr{{\loggates\char21}}            % Inverter
  64. \def\INVd{{\loggates\char22}}
  65. \def\INVl{{\loggates\char23}}
  66. \def\INVu{{\loggates\char24}}
  67. \def\XORr{\gdef\@gate{\char25}\@INr}     % XOR gate
  68. \def\XORd{\gdef\@gate{\char26}\@INd}
  69. \def\XORl{\gdef\@gate{\char27}\@INl}
  70. \def\XORu{\gdef\@gate{\char28}\@INu}
  71. \def\NXORr{\gdef\@gate{\char29}\@INr}    % NXOR gate, a.k.a. comparator
  72. \def\NXORd{\gdef\@gate{\char30}\@INd}
  73. \def\NXORl{\gdef\@gate{\char31}\@INl}
  74. \def\NXORu{\gdef\@gate{\char32}\@INu}
  75. %
  76. % In order to connect input lines we define some  skips.
  77. %
  78. \newskip\INmskip\setbox0=\hbox{{\loggates\char35}}\INmskip\ht0%
  79. \def\deflgskip#1#2{\setbox0=\hbox{{\loggates\char#2}}%
  80.                    \global\newskip#1\global#1\ht0%
  81.                    \global\advance #1 by-\INmskip}
  82. \deflgskip\INuskip{33}
  83. \deflgskip\INlskip{34}
  84. \deflgskip\INumskip{36}
  85. \deflgskip\INlmskip{37}
  86. \deflgskip\INmuskip{38}
  87. \deflgskip\INmlskip{39}
  88. \INmskip 0pt
  89. %
  90. % The following definitions are internal to loggates, and should not
  91. % normally be used.
  92. %
  93. \def\@gobble#1{} %Not strictly necessary in LaTeX...
  94. \def\@NIN{\futurelet\next\@@NIN}
  95. \def\@@NIN{\let\@next\@gobble%
  96.            {\loggates\@gate}%
  97.            \ifx\next2\else\ifx\next3\else\ifx\next4\else\ifx\next5%
  98.            \else\let\@next\relax\fi\fi\fi\fi\@next}
  99. \def\@INr{\futurelet\next\@@INr}
  100. \def\@@INr{\let\@next\@gobble%
  101.         \ifx\next2{\loggates\char33\char34\@gate}%
  102.         \else\ifx\next3{\loggates\char33\char34\char35\@gate}%
  103.         \else\ifx\next4{\loggates\char33\char34\char38\char39\@gate}%
  104.         \else\ifx\next5{\loggates\char33\char34\char35\char36\char37\@gate}%
  105.         \else{\loggates\@gate}\let\@next\relax\fi\fi\fi\fi\@next}
  106. \def\@INd{\futurelet\next\@@INd}
  107. \def\@@INd{\let\@next\@gobble%
  108.         \def\@up##1{\setbox0=\hbox{\@gate}\raise\ht0\hbox{\loggates##1}}%
  109.         \ifx\next2%
  110.           \hbox{\loggates\@up{\char40\char41}\@gate}%
  111.         \else\ifx\next3%
  112.           \hbox{\loggates\@up{\char40\char41\char42}\@gate}%
  113.         \else\ifx\next4%
  114.           \hbox{\loggates\@up{\char40\char41\char45\char46}\@gate}%
  115.         \else\ifx\next5%
  116.           \hbox{\loggates\@up{\char40\char41\char42\char43\char44}\@gate}%
  117.         \else%
  118.           \hbox{\loggates\@gate}\let\@next\relax\fi\fi\fi\fi\@next}
  119. \def\@INl{\futurelet\next\@@INl}
  120. \def\@@INl{\let\@next\@gobble%
  121.         \def\@up##1{\setbox0=\hbox{\@gate}\raise\ht0\hbox{\loggates##1}}%
  122.         \ifx\next2%
  123.           \hbox{\loggates\@gate\@up{\char47\char48}}%
  124.         \else\ifx\next3%
  125.           \hbox{\loggates\@gate\@up{\char47\char48\char49}}%
  126.         \else\ifx\next4%
  127.           \hbox{\loggates\@gate\@up{\char47\char48\char52\char53}}%
  128.         \else\ifx\next5%
  129.           \hbox{\loggates\@gate\@up{\char47\char48\char49\char50\char51}}%
  130.         \else%
  131.           \hbox{\loggates\@gate}\let\@next\relax\fi\fi\fi\fi\@next}
  132. \def\@INu{\futurelet\next\@@INu}
  133. \def\@@INu{\let\@next\@gobble%
  134.         \ifx\next2{\loggates\@gate\char54\char55}%
  135.         \else\ifx\next3{\loggates\@gate\char54\char55\char56}%
  136.         \else\ifx\next4{\loggates\@gate\char54\char55\char59\char60}%
  137.         \else\ifx\next5{\loggates\@gate\char54\char55\char56\char57\char58}%
  138.         \else{\loggates\@gate}\let\@next\relax\fi\fi\fi\fi\@next}
  139.  
  140.